A lo largo de las diferentes unidades se ha destacado una y otra vez la importancia de la monitorización en cualquier infraestructura de seguridad. Sin monitorización activa, no sabremos qué es lo que está pasando, no podremos actuar con la celeridad necesaria y, por lo tanto, estaremos ciegos ante cualquier problema. Un buen sistema de monitorización debe ser exhaustivo y mostrar las alertas que nos permitan solucionar cualquier incidencia antes incluso de que los usuarios se percaten de que existe.
Objetivo: Realizar una comparativa entre diferentes sistemas de monitorización (Zabbix y Prometheus) y documentar pruebas de concepto instalando y monitorizando dispositivos.
Característica | Zabbix | Prometheus |
Arquitectura | Basado en un servidor central que recolecta datos (Pull o Push) usando agentes pesados o SNMP/JMX. | Basado en métricas temporales (Time-Series) con modelo principal "Pull" (scrapea métricas expuestas). |
Agentes | Usa "Zabbix Agent" oficial instalado en los sistemas operativos a monitorizar. | Usa múltiples "Exporters" específicos (Node Exporter para Linux, Windows Exporter, etc). |
Curva de Aprendizaje | Curva moderada-alta, tiene una interfaz web integrada completa pero compleja inicialmente. | Curva pronunciada para PromQL (lenguaje de consultas), requiere integrar Grafana para cuadros de mando. |
Gestión de Alertas | Integrado de forma nativa en la plataforma web, fácil configuración visual de triggers. | Requiere configuración de Alertmanager (componente separado) y reglas por código (YAML). |
Escalabilidad | Escala muy bien usando "Zabbix Proxies" para entornos distribuidos y sucursales. | Diseñado nativamente de forma distribuida, permite federación y encaja perfecto con entornos efímeros (Kubernetes). |
Almacenamiento (BBDD) | Requiere bases de datos relacionales tradicionales (MySQL, PostgreSQL). | Usa su propia base de datos de series temporales (TSDB) en disco local, altamente optimizada para métricas. |
Complejidad de instalación | Instalación sencilla mediante paquetes APT. Los servicios systemd se crean automáticamente con el paquete. | Instalación manual compilando/descargando binarios, creando usuarios de sistema, copiando ficheros y escribiendo a mano los ficheros |
En esta demostración se instaló Zabbix Server 7.0 en una máquina virtual Linux (Ubuntu 24.04) y se configuraron agentes para monitorizar tanto el propio servidor Ubuntu como un portátil Dell Latitude 5490 con Windows.
El primer paso consistió en actualizar los repositorios del sistema e instalar las dependencias necesarias para que Zabbix funcione: el servidor web Apache, los módulos PHP requeridos y el motor de base de datos MySQL.

Se inicia, habilita y verifica el servicio MySQL. Acto seguido se ejecuta el asistente de securización (mysql_secure_installation) para establecer la contraseña de root y eliminar defaults inseguros:

Descargamos el paquete .deb del repositorio oficial de Zabbix 7.0 para Ubuntu (Noble) e instalamos los componentes del servidor:

Entramos en la consola de MySQL para crear la base de datos zabbix, el usuario asociado y otorgar los privilegios necesarios:

Poblamos la BBDD recién creada importando el esquema inicial que proporciona Zabbix mediante zcat:

Tras la importación, se desactiva la variable log_bin_trust_function_creators que habíamos habilitado temporalmente:

Editamos el fichero de configuración principal de Zabbix Server para introducir las credenciales de conexión a la base de datos:

Reiniciamos y habilitamos los servicios de Zabbix Server, Zabbix Agent y Apache2, y verificamos que todo arranca correctamente:

Cumplidos los prerrequisitos en la terminal de Ubuntu, accedemos a http://localhost/zabbix/setup.php y seguimos el asistente web oficial de Zabbix 7.0:

Una vez en el portal, configuramos el agente Linux local (zabbix_agentd.conf) apuntando a Server=127.0.0.1, ServerActive=127.0.0.1 y Hostname=Ubuntu-VM-SOC:

En la parte del portátil Dell-Latitude-5490, comprobamos que el Zabbix Agent 2 esté instalado y corriendo correctamente:

Observamos los logs del agente corroborando el inicio del listener en el puerto 10050 y las comprobaciones activas:
.jpeg)
.jpeg)
Hacemos validaciones de conectividad (ICMP) desde el portátil hacia redes externas:
.jpeg)
Desde la web de Zabbix creamos el nuevo equipo rellenando nombre, IP del agente, plantilla y grupo de hosts:

Una vez completada la integración, Zabbix comienza a recolectar métricas del portátil:

Para completar la experiencia, replicamos la monitorización usando Prometheus 2.48.0, instalado directamente desde binarios en la misma VM Ubuntu. A diferencia de Zabbix, Prometheus no provee paquetes
.deb que creen los servicios de forma automática: fue necesario crear manualmente el usuario de sistema, las carpetas de datos, copiar binarios y escribir a mano el demonio systemd (.service), lo que supuso una complejidad de instalación notablemente mayor.
El primer paso es crear un usuario de sistema sin shell ni directorio home, dedicado exclusivamente a ejecutar Prometheus. Después, creamos las carpetas de configuración y de datos:

Descargamos el tarball oficial de Prometheus v2.48.0 desde GitHub y lo extraemos:

Copiamos los binarios (prometheus y promtool) a /usr/local/bin/ y las consolas web a /etc/prometheus/. Después asignamos la propiedad al usuario prometheus:

Editamos el fichero de configuración principal de Prometheus donde definimos los scrape jobs para cada target que queremos monitorizar:

A diferencia de Zabbix (cuyo paquete .deb crea los servicios automáticamente), en Prometheus debemos escribir a mano el fichero .service de systemd:

Recargamos los ficheros de systemd, iniciamos y habilitamos el servicio:

En el lado del portátil Dell, descargamos Windows Exporter v0.31.3 desde la página oficial de GitHub Releases. Este exporter es el equivalente de Node Exporter pero para sistemas Windows, y expone las métricas del sistema en el puerto :9182:

Tras instalar el .msi, abrimos una ventana de PowerShell como Administrador y creamos una regla de firewall para permitir el tráfico entrante en el puerto 9182:

Accedemos a http://localhost:9090 y consultamos la página de Targets para verificar la conectividad con cada endpoint. Inicialmente, el target dell-laptop aparece en estado DOWN porque el puerto de scraping no era correcto (9100 en lugar de 9182 para Windows Exporter):

El Portátil Dell ejecuta Windows Exporter, que expone métricas en el puerto :9182 (no :9100 como Node Exporter de Linux). Corregimos el prometheus.yml actualizando el job del Dell:

Tras reiniciar Prometheus, el target Dell aparece ahora en estado UP:

Desde la interfaz web de Prometheus (localhost:9090/graph), ejecutamos consultas PromQL para verificar los datos recolectados:
